﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Entidades;
using LogicaNegocio;

namespace PresentacionEscritorio
{
    public partial class frmRoles : Form
    {
        private int idRolSeleccionado;

        public frmRoles()
        {
            InitializeComponent();
        }

        private void frmRoles_Load(object sender, EventArgs e)
        {
            cargarGrilla();
            btnDatosRol.Text = "Agregar";
        }

        private void cargarGrilla()
        {
            //vaciamos grilla si hay algo 
            if (grdRoles.RowCount > 0)
                grdRoles.Rows.Clear();

            GestorRoles gr = new GestorRoles();
            List<Rol> list = gr.obtenerTodos();
            if (list != null && list.Count > 0)
            {
                for (int i = 0; i < list.Count; i++)
                {
                    int fila = grdRoles.Rows.Add();
                    grdRoles.Rows[fila].Cells["Nombre"].Value = list[i].Nombre;
                    grdRoles.Rows[fila].Cells["IdRol"].Value = list[i].IdRol;
                }
            }
        }

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            if (btnDatosRol.Text == "Agregar")
                agregarRol();
            else if (btnDatosRol.Text == "Modificar")
                modificarRol();
            else if (btnDatosRol.Text == "Limpiar")
                limpiarCampos();
            else if (btnDatosRol.Text == "Dar baja")
                darBajaRol();
        }

        private void darBajaRol()
        {
            //update con fecha de baja
            DateTime fechaBaja = DateTime.Now;
            GestorRoles gr = new GestorRoles();
            bool res = gr.registrarBajaRol(idRolSeleccionado, fechaBaja);

            if (res)
                MessageBox.Show("Se ha dado de baja al rol seleccionado", "Informacion", MessageBoxButtons.OK);
            else
                MessageBox.Show("No se ha podido dar de baja al rol seleccionado", "Informacion", MessageBoxButtons.OK);

            btnDatosRol.Text = "Agregar";

            cargarGrilla();
            limpiarCampos();
        }

        private void limpiarCampos()
        {
            txtNombre.Text = null;
            txtNombre.Enabled = true;
            txtDescripcion.Text = null;
            txtDescripcion.Enabled = true;
            dtpFechaDesde.Value = DateTime.Now;
            dtpFechaDesde.Enabled = true;
            dtpFechaHasta.Value = DateTime.Now;
            dtpFechaDesde.Enabled = true;
            dtpFechaHasta.Checked = false;
            btnDatosRol.Text = "Agregar";
        }

        private void modificarRol()
        {
            //tomar datos, guardarlo en la bd
            if (validarDatos())
            {
                Rol rolNuevo = new Rol();
                rolNuevo.IdRol = idRolSeleccionado;
                rolNuevo.Nombre = txtNombre.Text;
                if (!string.IsNullOrEmpty(txtDescripcion.Text))
                    rolNuevo.Descripcion = txtDescripcion.Text;

                GestorRoles gr = new GestorRoles();
                bool res = gr.modificarRol(rolNuevo);
                if (res)
                {
                    MessageBox.Show("Se ha modificado exitosamente el nuevo rol", "Información", MessageBoxButtons.OK);
                    limpiarCampos();
                }
                else
                    MessageBox.Show("No se ha podido modificar el nuevo rol", "Información", MessageBoxButtons.OK);
            }
            btnDatosRol.Text = "Agregar";

            cargarGrilla();
        }

        private void agregarRol()
        {
            if (validarDatos())
            {
                Rol rolNuevo = new Rol();
                rolNuevo.Nombre = txtNombre.Text;
                if (!string.IsNullOrEmpty(txtDescripcion.Text))
                    rolNuevo.Descripcion = txtDescripcion.Text;
                rolNuevo.FechaAlta = dtpFechaDesde.Value;

                GestorRoles gr = new GestorRoles();
                bool res = gr.registrarRol(rolNuevo);
                if (res)
                {
                    MessageBox.Show("Se ha registrado exitosamente el nuevo rol", "Información", MessageBoxButtons.OK);
                    cargarGrilla();
                    limpiarCampos();
                }
                else
                    MessageBox.Show("No se ha podido registrar el nuevo rol", "Información", MessageBoxButtons.OK);

            }
        }

        private bool validarDatos()
        {
            bool res = true;
            string error = "";
            if (string.IsNullOrEmpty(txtNombre.Text))
            {
                error += "El nombre del rol es requerido \n\r";
                res = false;
            }
            return res;
        }

        private void grdRoles_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (grdRoles.CurrentCell.OwningColumn == grdRoles.Columns["Consultar"])
            {
                btnDatosRol.Text = "Limpiar";
                deshabilitarCampos();
            }
            if (grdRoles.CurrentCell.OwningColumn == grdRoles.Columns["DarBaja"])
            {
                btnDatosRol.Text = "Dar baja";
                deshabilitarCampos();
                dtpFechaHasta.Enabled = true;
            }
            if (grdRoles.CurrentCell.OwningColumn == grdRoles.Columns["Modificar"])
            {
                btnDatosRol.Text = "Modificar";
                txtNombre.Enabled = true;
                txtDescripcion.Enabled = true;
                dtpFechaDesde.Enabled = false;
                dtpFechaHasta.Enabled = false;
            }
            idRolSeleccionado = int.Parse(grdRoles.CurrentRow.Cells["IdRol"].Value.ToString());
            cargarRol(idRolSeleccionado);
        }

        private void cargarRol(int idRol)
        {
            //buscarRol, cargarlo en el form
            GestorRoles gr = new GestorRoles();
            Rol rolSeleccionado = gr.obtenerRol(idRol);
            if (rolSeleccionado != null)
            {
                txtNombre.Text = rolSeleccionado.Nombre;
                txtDescripcion.Text = rolSeleccionado.Descripcion;
                dtpFechaDesde.Value = rolSeleccionado.FechaAlta;
            }
            else
                MessageBox.Show("No se ha podido recuperar el rol solicitado", "Informacion", MessageBoxButtons.OK);


        }

        private void deshabilitarCampos()
        {
            txtNombre.Enabled = false;
            txtDescripcion.Enabled = false;
            dtpFechaDesde.Enabled = false;
            dtpFechaHasta.Enabled = false;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.Dispose();
        }
    }
}
